<?php
/*
 * 共通関数定義
 */

/**
 * オブジェクトローダーYuToriを実行し、対象のオブジェクトを返す
 */
function Y () {
	try {
		$Y = YuTori::getInstance ();
		$preArgs = func_get_args();
		$Args = array(reset($preArgs), array_slice($preArgs,1));
		
		return call_user_func_array(array($Y, 'select'), $Args);
	} catch (YuToriException $e) {
		$Log = array();
		$Log[] = '例外を補足しました。';
		$Log[] = 'Code:'.$e->getCode();
		$Log[] = 'File:'.$e->getFile();
		$Log[] = 'Line:'.$e->getLine();
		$Log[] = 'Cursor: '.YuTori::nowObject()->FullName;
		$Log[] = $e->getMessage();
		
		Y('Logger.Debug', $Log);

		// 停止する場合の処理
		while (ob_get_level()) {ob_end_clean();}
		if (!headers_sent()) header ("HTTP/1.1 500 Internal Server Error");
		if (Y('App.Config.debugmode.level$')) {	
			Y('Logger.Output+', 'html');
			include_once (dirname(__FILE__).'/debuglog.php');
		} else {
			print ('<h1>Internal Server Error</h1>');
		}
		exit();
	}
}

/**
 * テンプレート用 Y()の戻り値を直接printする。
 * 第２引数にnull時のデフォルト値を指定可能。
 * 第３引数以降はcallへの引数となる。
 */
function printY ($Selecter, $Default = null) {
	$Args = func_get_args ();
	if (count($Args) > 2) $tArgs = array_slice($Args, 2);
	else $tArgs = array();
	$Rt = call_user_func_array('Y', array_merge((array)$Selecter, $tArgs));
	if (!is_null($Default) && empty($Rt)) $Rt = $Default;
	print $Rt;
}

/**
 * printYを実行したあとに改行コードを出力する
 */
function printYnl () {
	$Args = func_get_args ();
	call_user_func_array('printY', $Args);
	print "\n";
}



?>
